import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * Description: Servlet的问世程序.
 * User: 86187
 * Date: 2022-11-18
 * Time: 20:25
 */

    // @WebServlet 这个注解很重要!!会针对某些 GET 请求来生效.
    // 哪些?? 此处写下的 "/hello" 意思就是 GET 请求并且 url 里面的路径是 /hello 的请求才会生效!!
    // 因此 Tomcat 可以让我们关联很多路径, 可以给不同路径关联上不同的类, 也就是执行了不同的方法了.
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    // 一定要继承 HttpServlet 类, 该类是写servlet代码最常用的类.
    // 该类是来自通过 maven 下载的那个servlet的.jar包里.

    // 直接输入 doGet + enter, 重写 doGet 方法.
    @Override
        // doGet 方法 是 HttpServlet 父类里已经包含了的方法. 此处是需要重写父类的该方法的.
        // doGet 表示当前 Tomcat 在收到某些 GET 请求的时候, 会调用这个 doGet 方法.
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // HttpServletRequest req 是请求request.  HttpServletResponse resp 是响应response.
        // req 对象, 这是 Tomcat 把 HTTP 请求报文解析成一个对象了.
        // resp 对象, 则是 Tomcat 构造的一个空的对象(相当于一个输出型参数).
        // 此处 doGet 就需要根据 req 里的一些数据 + 业务逻辑构造生成一个完整的 resp 对象.
        // 再进一步, Tomcat 就把 resp 对象转成一个 HTTP 报文.

        // 注意: 自动生成的 super.doGet(req, resp); 这段代码一定要干掉, 留着一定会出问题!!
        // super.doGet(req, resp);

        // 是在 Tomcat 这边打印日志.
        System.out.println("hello");
        // 还可以给客户端返回一个字符串.
        resp.getWriter().write("hello");
    }
}

// 代码写完后要进行打包. 打包就是:
// 先把缺失的依赖给下载好, 然后编译所有的 .java 文件, 得到一堆 .class 文件 给打到一个压缩包中.
// 如何打包?? 点击右边的 Maven 按钮, 展开servlet项目, 展开Lifecycle, 双击package.
// 出现 BUILD SUCCESS 就是打包成功了. 打包在了左边的 target 文件中的 .jar包中.
// 虽然打出了 .jar包, 但是Tomcat不认~~Tomcat要求的压缩包格式是 war包,
// jar包和war包最主要的区别就是: war包,会把整个webapp目录给打进去,包括web.xml,以及未来放的一些静态html,css....
// 如何打war包??需要修改 pom.xml. 修改之后再次打包 就可以在左边target里面看到一个war包.
// 再然后就可以部署程序了: 将war包拷贝到Tomcat的webapps中, 重启Tomcat,Tomcat会加载(解压缩)war包.
// 最后进行验证程序: 通过浏览器, 构造一个HTTP请求, 来访问Tomcat 服务器.
// (如: http://127.0.0.1:8080/myProjectServlet1/hello). myProjectServlet1 是war包的名字 /hello 是上述第一个注解提到的.